#include "Message.h"
#include "Client.h"
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <string>
#include <stdio.h>
#include <unistd.h>

using std::getline;
using std::cout;
using std::endl;
using std::string;
using std::cin;

int main(int args, char** argv){
    string str, conSend;
    Message msg;
    Client client;
    int mode, command;
    bool exitFlag;
    char sendbuff[512] = {0};
    char recvbuff[65535] = {0}; 
    client.start();

    while(true){
        system("clear"); 
        cout << "请输入对应的数字, 选择功能:" << endl;
        cout << "-------- 1.搜索关键词 --------" << endl;
        cout << "-------- 2.搜索网页   --------" << endl;
        cout << "-------- 3.退出程序   --------" << endl;
        cout << endl << "input:"; 
        cin >> mode;
        if (cin.fail()) {
            cin.clear(); // 清除错误标志
            cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // 忽略输入缓冲区中的内容
            cout <<"指令非法!按 Enter 键重新输入"<< endl;
            cin.get(); // 等待用户按下任意键继续
            continue;
        }
        if(mode > 3 || mode < 1){
            cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // 忽略输入缓冲区中的内容
            cout <<"指令非法!按 Enter 键重新输入"<< endl;
            cin.get(); // 等待用户按下任意键继续
            continue;
        }
        if(mode == 3){
            cout <<"系统退出!"<< endl;
            break; 
        }
        exitFlag = false;
        cin.ignore(); 
        while(true){
            system("clear");
            cout << "可执行操作:" << endl;
            cout << "---- 1.清屏       ----" << endl;
            cout << "---- 2.返回菜单栏 ----" << endl;
            while(true){
                for(int i = 0 ; i < 2; i++){
                    cout << "==================================================";
                }
                cout << endl;
                cout << "请输入您的搜索内容或指令:" << endl;
                getline(cin, conSend);
                for(int i = 0 ; i < 2; i++){
                    cout << "--------------------------------------------------";
                }
                cout << endl;
                if(conSend == "1"){
                    break;
                }
                else if(conSend == "2"){
                   exitFlag = true;
                   break;
                }
                msg.setMsgSendJson(conSend.length(), mode , conSend);
                memset(sendbuff, 0 , sizeof(sendbuff));
                memset(recvbuff, 0 , sizeof(recvbuff));
                memcpy(sendbuff, msg.getMsgSendCon().c_str(), msg.getMsgSendLen());
            
                // 发送数据 
                send(client.getfd(), msg.getMsgSendLenPtr(), sizeof(int), 0); // 发送 Json 字符串长度
                send(client.getfd(), sendbuff, msg.getMsgSendLen(), 0); // 发送序列化数据

                // 接收数据            
                recv(client.getfd(), msg.getMsgRecvLenPtr(), sizeof(int), 0); // 接收返回结果 
                recv(client.getfd(), recvbuff, msg.getMsgRecvLen() , 0); // 接收返回结果 

                msg.setMsgRecvJson(recvbuff);
                msg.handleMsgRecv(); 
            }
            if(exitFlag){
                break;
            }
        } 
    } 
    close(client.getfd());
    return 0;
}
